package com.heima.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.mapper.SkuClassMapper;
import com.heima.mapper.SkuMapper;
import com.heima.pojo.dto.SkuAddDto;
import com.heima.pojo.entity.Sku;
import com.heima.pojo.entity.SkuClass;
import com.heima.pojo.vo.PageResponseVo;
import com.heima.pojo.vo.SkuVO;
import com.heima.service.SkuService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuService {

    @Autowired
    private SkuMapper skuMapper;

    @Autowired
    private SkuClassMapper skuClassMapper;

    @Override
    public PageResponseVo<SkuVO> searchSku(Integer pageIndex, Integer pageSize, String skuName) {
        Page<Sku> skuPage = new Page<>(pageIndex, pageSize);
        LambdaQueryWrapper<Sku> wrapper = new LambdaQueryWrapper<>();
        // 根据商品名称模糊查询
        if (StringUtils.hasText(skuName)) {
            wrapper.like(Sku::getSkuName, skuName);
        }
        Page<Sku> resultPage = this.page(skuPage, wrapper);
        for (Sku sku : resultPage.getRecords()) {
            SkuClass skuClass = skuClassMapper.selectSkuClassById(sku.getClassId());
            sku.setSkuClass(skuClass);
        }
        List<SkuVO> skuVOList = skuPage.getRecords().stream().map(sku -> {
            SkuVO skuVO = new SkuVO();
            BeanUtils.copyProperties(sku, skuVO);
            if (sku.getSkuClass() != null) {
                skuVO.setSkuClass(sku.getSkuClass());
            }
            return skuVO;
        }).collect(Collectors.toList());
        PageResponseVo<SkuVO> result = new PageResponseVo<>();
        result.setPageIndex(skuPage.getCurrent());
        result.setPageSize(skuPage.getSize());
        result.setTotalPage(skuPage.getPages());
        result.setTotalCount(skuPage.getTotal());
        result.setCurrentPageRecords(skuVOList);
        return result;
    }

    @Override
    public boolean addSku(SkuAddDto skuAddDto) {
        Sku sku = new Sku();
        BeanUtils.copyProperties(skuAddDto, sku);
        return this.save(sku);
    }

    @Override
    public boolean updateById(Long id, SkuAddDto skuAddDto) {
        Sku sku = new Sku();
        BeanUtils.copyProperties(skuAddDto, sku);
        sku.setSkuId(id);
        return this.updateById(sku);
    }
}
